package main

import "fmt"

/**
Go中的map与其他语言的K:V键值对数据结构类似
*/

func main() {
	//numbers := make(map[string]int)//需要声明时可以这么输入，用make开辟内存
	numbers := map[string]int{ //中括号是键的类型，后面是值的类型
		"one": 1, "two": 2, "three": 3,
		"four": 4, "fire": 5, "six": 6,
		"seven": 7, "eight": 8, "nine": 9,
		"ten": 10, //末尾一定要有逗号
	}

	//搜索key对应的值时可以这个输入
	fmt.Printf("one对应的数字为'%d'\n", numbers["one"])

	//也可以用range来遍历map
	for k, v := range numbers {
		fmt.Println(k, "\t", v)
	}

	//为map添加元素时可以这么做
	numbers["eleven"] = 11

	//为已经存在的key赋值会将该key的value重新替换成
	numbers["eleven"] = 10

	//map检查key是否存在的方式
	var flag bool
	var value int
	value, flag = numbers["one"] //如果numbers中有one这个key，那么value就会得到
	//one对应值，而flag就会被赋值为true，如果没有one这个key，那么flag就是false

	//上面的形式还可以更写成
	v, f := numbers["one"] //实际上上面第一种方式我们还得先命名对象，但这第二种
	//我们可以省去命名对象这一步了

	//map的删除则需要依靠内置函数delete了
	delete(numbers, "one") //删除numbers这个map中键为one的值
	//通常来说语句 delete(numbers, "one") 会删除 numbers 中由 m["one"] 建立的实例。

}
